package Q17_03_Random_Set;
import CtCILibrary.AssortedMethods;
public class QuestionAlternate {
/* Random number between lower and higher, inclusive */
public static int rand(int lower, int higher) {
return lower + (int)(Math.random() * (higher - lower + 1));
}
/* pick M elements from original array, using only elements 0 through i (inclusive).*/
public static int[] pickMRecursively(int[] original, int m, int i) {
if (i + 1 < m) { // Not enough elements
return null;
} else if (i + 1 == m) { // Base case -- copy first m elements into array
int[] set = new int[m];
for (int k = 0; k < m; k++) {
set[k] = original[k];
}
return set;
} else {
int[] set = pickMRecursively(original, m, i - 1);
int k = rand(0, i);
if (k < m) {
set[k] = original[i];
}
return set;
}
}
/* pick M elements from original array.*/
public static int[] pickMIteratively(int[] original, int m) {
int[] subset = new int[m];
/* Fill in subset array with first part of original array */
for (int i = 0; i < m ; i++) {
subset[i] = original[i];
}
/* Go through rest of original array. */
for (int i = m; i < original.length; i++) {
int k = rand(0, i);
if (k < m) {
subset[k] = original[i];
}
}
return subset;
}
public static void main(String[] args) {
int[] cards = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(AssortedMethods.arrayToString(cards));
int[] set = pickMIteratively(cards, 4);
System.out.println(AssortedMethods.arrayToString(set));
}
}